草庐IT

Java HotSpot 枚举开销

全部标签

c++ - 为什么编译器不提示错误的枚举值

#includeenumIsOptionAEnum{IsOptionA_YES,IsOptionA_NO};enumIsOptionBEnum{IsOptionB_YES,IsOptionB_NO};voidTestFunc(IsOptionAEnumoptionA,IsOptionBEnumoptionB){if(optionA==IsOptionA_YES||optionA==IsOptionB_YES)//typo{//...}//if(optionA==IsOptionA_YES||optionB==IsOptionB_YES)//correctone//{//}}问题>opt

c++ - 如何优雅地将所有枚举放入 std::set

我有一个枚举,我想将它们全部放入集合中(然后使用set_intersection算法删除一些,但这是题外话)。除了我卡在第1步之外,一切都很好。:)如果我有(真实类具有更高基数的枚举)classMyClass{enumColor{red,green,blue}};我将如何初始化std::set包含所有枚举。我显然可以一个接一个地手动插入它们,做一个带强制转换的for循环,因为它们是连续的并且从0开始(我认为如果我不在枚举定义中使用=则这是必需的),但我正在寻找一种更优雅的方式。编辑:如果可能的话,我更喜欢C++03解决方案,因为当前的问题实例需要它,但如果不是,C++11也很好知道。

c++ - 为什么将枚举标记为导出/导入会中断 Doxygen 生成?

使用Doxygen,我偶然发现了这个警告:D://Camera.h:20:warning:documentedsymbol`enumDLLPORTct::CameraCapture::ct::CameraCapture::CamType'wasnotdeclaredordefined.现在我知道为什么Doxygen找不到那个类(命名空间显然是重复的),但我不明白的是它为什么还要搜索它。这个枚举在头文件中,在类定义的正上方,并且发现类很好,它也没有生成那些双命名空间。源代码也可以编译,所以它可能不是导致Doxygen这些问题的语法错误。具体来说,源代码如下所示:#ifdefCT_EXPO

c++ - 枚举的编译时查找表

我有一个枚举列表,定义如下:enumPinEnum{kPinInvalid,kPinA0,kPinA1,kPinB0,kPinB1,kPinC0,kPinC1,}这些枚举中的每一个都需要与另外两个值相关联,即端口和引脚号。目前,我正在通过运行时函数访问它们:GPIO_TypeDef*PinGetPort(constPinEnumpin){switch(pin){casekPinA0:casekPinA1:returnGPIOA;casekPinB0:casekPinB1:returnGPIOB;casekPinC0:casekPinC1:returnGPIOC;default:retu

c++ - 在 C++11 中,我可以引用在模板参数中定义的枚举类吗

这是我尝试编写的代码的简化版本:templateclassStateMachine{public:voidSetState(Derived::States){static_cast(this)->TransitionTo(s);}};classMyFSM:publicStateMachine{public:enumclassState{State1,State2,State3};voidTransitionTo(States){_state=s;}private:State_state=State::State1;};我正在使用带有clang的c++11。我在这里得到的错误是10:17

c++ - 在某些枚举模板情况下启用类构造函数

出于性能原因,我使用带有枚举的模板化类而不是继承继承(这不是一个选项)。此时我有类似的东西:typedefenum{A,B,C,D}QueueType;templateclassQueue{Queue(inta){...}//onlyusablewhenT=AQueue(unsigneda,unsignedb){...}//onlyusablewhenT=B||T=CQueue(somestructz){...}//onlyusablewhenT=B||T=C//otherconstructors}现在,如果为已定义的T调用不兼容的构造函数,我会在T上使用大量的ifs/switches

荧光验证验证枚举值

我有以下模型:publicclassViewDataItem{publicstringviewName{get;set;}publicUpdateIndicatorupdateIndicator{get;set;}}随着以下枚举:publicenumUpdateIndicator{Original,Update,Delete}以及以下验证器:publicclassViewValidator:AbstractValidator{publicViewValidator(){RuleFor(x=>x.viewName).NotEmpty().WithMessage("Viewnamemustbesp

c++ - 枚举成员的值,当某些成员具有用户定义的值时

enumABC{A,B,C=5,D,E};D和E能保证大于5吗?A和B是否保证小于5(如果可能)?编辑:如果我说C=1会发生什么 最佳答案 它由C++标准7.2/1保证:Theidentifiersinanenumerator-listaredeclaredasconstants,andcanappearwhereverconstantsarerequired.Anenumerator-definitionwith=givestheassociatedenumeratorthevalueindicatedbytheconstant-

c++ - 如何将无符号整数分配给 C++ 中的枚举?

在我正在重写其内部结构的C++库中,我有一些我想转换为枚举的无符号整数变量:enumInitType{INIT,NON_INIT};我有一个这种类型的变量:InitTypeInitVar;库是从变量为纯整数的代码的另一部分调用的:uint32_tUnsignedIntVar;我想将从调用者传递的未签名版本分配给库内部枚举:InitVar=UnsignedIntVar;但是编译器不喜欢这样:error:invalidconversionfrom'uint32_t'to'InitType'执行此转换最干净的方法是什么?以下是我的一些想法:如果enum只有两个值,我可以这样做:InitVar

c++ - "<<"(双尖括号)在 C/C++ 枚举中是什么意思?

enumofp10_port_state{OFPPS10_STP_LISTEN=0 最佳答案 它是一个左移位运算符。这意味着它将位向左移动指定的位数:假设值为:0x0For000011110x0F在MicrosoftC++中,右移(>>)保留符号(或最重要的数字,最左边的数字)取决于数字是有符号还是无符号(假设一个字节的大小):signedinteger(anintforexample):0x80or100000000x80>>7=111111110x10or000100000x10>>4=00000001ifitsunsigned